

#include "AGTRenderSystem/RenderManager.h"
#include "AGTObjectSystem/ObjectSceneManager.h"
#include "AGTInputSystem/InputHandler.h"
#include "AGTGameSystem/GameStateMgr.h"
#include <Ogre.h>

#include "DefaultScene.h"
#include "ProtoScene.h"

#include "TitleScreen.h"

#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
#define WIN32_LEAN_AND_MEAN
#include "windows.h"
#endif

#ifdef __cplusplus
extern "C" {
#endif

#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
   INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
#else
   int main(int argc, char *argv[])
#endif
   {


	   ObjectSceneManager::getSingleton();		// Call the getSingleton function to initialise the manager
	   GameStateMgr::getSingleton()->start();	// Calls start function and creates singleton class for manager
	   GameStateMgr::getSingleton()->changeState(TitleScreen::getSingleton());

      try {

		  // Automated WHILE loop method.
		  // All Managers are attached to a frame listener. Rendering function will call the frameStart/End functions
		  // in the managers for update.
		  RenderManager::getSingleton()->startRendering();

      } catch( Ogre::Exception& e ) {
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
         MessageBox( NULL, e.getFullDescription().c_str(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
#else
         std::cerr << "An exception has occured: " <<
            e.getFullDescription().c_str() << std::endl;
#endif
      }

      return 0;
   }

#ifdef __cplusplus
}
#endif

